package com.zk.spring5;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ImportResource;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @author ZK
 * @Description
 * @time 2021/4/25 23:26
 * @note
 */
@Component
public class Person {
    // 添加属性注入的注解。
    // 根据类型进行自动注入，由于只有一个类，故可以只用@Autowired
    // 注意这里不需要定义set方法
    @Autowired
    private Book book1;

    // 由于有两个实现类，如果只用@Autowired会提示Could not autowire. There is more than one bean of 'UserDAO' type.
    // 解决方法是再加上一个@Qualifier，并在其value属性中定义需要的类的别名
    // 在没使用@Component注解的value属性另外定义别名时，默认的别名为首字母小写
    @Autowired
    @Qualifier(value = "userDAOImplTest")
    private UserDAO userDAO1;

    // 使用@Resource实现根据类型或属性名称自动注入。
    @Resource               // 这个表示根据类型自动注入
    private Book book2;

    @Resource(name = "userDAOImpl1") // 使用name属性来实现根据属性名称注入
    private UserDAO userDAO2;

    @Value(value = "hhhhhh")
    private String name;

    public void show() {
        System.out.println("this is a person!");
        book1.show();
        book2.show();
        userDAO1.show();
        userDAO2.show();
        System.out.println("name = " + name);
    }
}
